package ArrayDemo;

/**
 * 给定一个表示 大整数 的整数数组 digits，其中 digits[i] 是整数的第 i 位数字。
 * 这些数字按从左到右，从最高位到最低位排列。这个大整数不包含任何前导 0。
 * 将大整数加 1，并返回结果的数字数组。
 *
 * 输入：digits = [1,2,3]
 * 输出：[1,2,4]
 * 解释：输入数组表示数字 123。
 * 加 1 后得到 123 + 1 = 124。
 * 因此，结果应该是 [1,2,4]。
 */
public class demo66 {
    public static void main(String[] args) {
        int[] digits = {1,2,3};
        int[] ints = plusOne(digits);
        for (int i = 0; i < ints.length; i++) {
            System.out.print(ints[i]+" ");
        }
    }
    /*//大整数用此方法会超出数据的范围
    public static int[] plusOne(int[] digits) {
        int num=0;
        for (int i = digits.length-1,j=0; i >=0 ; i--,j++) {
            num = (int) (num+digits[i]*Math.pow(10,j));
        }
        num++;
        String s = String.valueOf(num);
        int [] arr = new int[s.length()];
        for (int k = 0; k < s.length(); k++) {
            char c = s.charAt(k);
            arr[k] = c-'0';//关键！！！！数字char字符转换成数字的最佳实践
        }
        return arr;
    }*/

    public static int[] plusOne(int[] digits) {
                int i = digits.length-1;
        digits[i]++;
        while (digits[i] == 10){
            digits[i] = 0;
            if(i==0){
                int[] ans = new int[digits.length+1];
                ans[0]=1;
                for (int j = 1; j < ans.length; j++) {
                    ans[j] = digits[j-1];
                } //数组复制只能这样操作
                return ans;
            }
            digits[i-1]++;
            i--;
        }
        return digits;
    }
}

